/*
 * Copyright 2014-2017 All right reserved.
 */

package com.wlb365.doc.cfca;

import cn.hutool.core.util.CharsetUtil;
import cn.hutool.crypto.digest.DigestUtil;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
import cn.hutool.crypto.symmetric.SymmetricCrypto;

/**
 * <p>
 * 概述：通讯加密
 * </p>
 *
 * @author 创建人：    ryl
 * @copyRight 所有权©：  2014-2017 All right reserved.
 * @date 创建时间：2017年8月16日 下午3:14:51
 */
public class HttpCryption {
    private static final byte[] KEY = new byte[10];

    /**
     * <p>
     * 概述：入参摘要散列，DES加密
     * </p>
     *
     * @return 返回：          String
     * @author 创建人：      ryl
     * @createDate 创建时间：   2017年8月16日 下午3:22:03
     * @Param 参数：          @param str
     * @Param 参数：          @return
     */
    synchronized public static String enCryption(String str) {
        String value = getSha1(str);
        SymmetricCrypto des = new SymmetricCrypto(SymmetricAlgorithm.DES, KEY);
        String encryptHex = des.encryptHex(value);
        return encryptHex;
    }

    /**
     * <p>
     * 概述：解密 DES,解密后得到加盐的sha1摘要
     * </p>
     *
     * @return 返回：          String
     * @author 创建人：      ryl
     * @createDate 创建时间：   2017年8月16日 下午3:31:50
     * @Param 参数：          @param str
     * @Param 参数：          @return
     */
    synchronized public static String deCryption(String str) {
        SymmetricCrypto des = new SymmetricCrypto(SymmetricAlgorithm.DES, KEY);
        String decryptStr = des.decryptStr(str, CharsetUtil.CHARSET_UTF_8);
        return decryptStr;
    }

    /**
     * <p>
     * 概述：获取sha1散列后的值
     * </p>
     *
     * @return 返回：          String
     * @author 创建人：      ryl
     * @createDate 创建时间：   2017年8月16日 下午3:34:07
     * @Param 参数：          @param str
     * @Param 参数：          @return
     */
    private static String getSha1(String str) {
        return DigestUtil.sha1Hex(str);
    }

    public static void main(String[] args) {
        String value = "0482b3d77b594e16b1ce0ce3d4099868";
        String enValue = enCryption(value);
        System.out.println(enValue);
        String deValue = deCryption(enValue);
        System.out.println(deValue);
    }
}
